//
//  SYLJUserAccountViewModel.swift
//  Weibo10
//
//  Created by 刘俊 on 15/10/18.
//  Copyright © 2015年 itheima. All rights reserved.
//

import Foundation

class SYLJUserAccountViewModel {

    /// 模型属性
    var account: SYLJUserAccount?
    /// 单例
    static let sharedUserAccountViewModel = SYLJUserAccountViewModel()
    /// 返回有效的 token
    var accessToken: String? {
        
        // 如果 token 没有过期，返回 account.中的 token 属性
        if !isExpiresDate {
            return account?.access_token
        }
        return nil
    }

    /// 判断用户是否登录过
    var userLogon: Bool {
        if account?.access_token != nil && !isExpiresDate {
            return true
        }
        return false
    }
    /// 用户信息文件路径
    private var userInfoAccountPath: String { //没有等号
    let path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).last!
        return (path as NSString).stringByAppendingPathComponent("account.plist")
    }
    //    var
    /// 用户是否过期
    private var isExpiresDate: Bool {
        if account?.expiresDate?.compare(NSDate()) == NSComparisonResult.OrderedDescending{
            return false
        }
        return true
    }
    /// 构造函数
    private init() {
        // 解档
        account = NSKeyedUnarchiver.unarchiveObjectWithFile(userInfoAccountPath) as? SYLJUserAccount
        // 判断用户登录是否过期
        if isExpiresDate {
            print("用户登录已过期,请重新登录")
            account = nil
        }
        print(account)
    }
}

// MARK: - OAuth中用户账户相关的网络方法
extension SYLJUserAccountViewModel {

    /*
    抽取方法的步骤:
    1,定义新的函数
    2,粘贴要抽取的方法
    3,根据上下文修改函数,重新确定函数的参数
    4,将该方法附带的子方法粘贴过来
    */
    func loadAccessToken(code: String,finished: (isSuccessed: Bool)->()) {
        NetworkTools.sharedTools.loadAccessToken(code) { (result, error) -> () in
            
            // 1> 判断错误
            if error != nil {
                print("出错了")
                return
            }
            
            self.account = SYLJUserAccount(dict: result as![String: AnyObject])
            self.loadUserInfo(self.account!,finished: finished)
    }
        
    // 2> 输出结果

    }
    private func loadUserInfo(account: SYLJUserAccount,finished: (isSuccessed: Bool)->()) {
        NetworkTools.sharedTools.loadUserInfo(account.access_token!, uid: account.uid!) { (result, error) -> () in
            if error != nil {
                print("加载用户信息")
                return
            }
            // 如果使用if let / guard let 统统使用'?'
            guard var dict = result as? [String: AnyObject] else {
                print("格式错误")
                return
            }
            print(dict["screen_name"])
            print(dict["avatar_large"])
            
            // 获得用户信息后我们需要将用户信息做保存(模型)
            account.screen_name = dict["screen_name"] as? String
            account.avatar_large = dict["avatar_large"] as? String
            
            account.saveUserAccount()
            
            finished(isSuccessed: true)
        }
    }

}